home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
System Booster
/
System Booster.iso
/
Archives
/
StartupTools
/
LoadKickC0.lha
/
LoadKickC0
/
src
/
LoadKickC0.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-01-03
|
3KB
|
115 lines
/****************************************************************************
* *
* LoadKickC0 V1.1 -- Copyright 1992 by Matthias Scheler *
* *
* This program may be freely copied, as long as all copyright *
* notices are left intact and unchanged. *
* *
****************************************************************************/
#include <exec/memory.h>
#include <exec/execbase.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include <stdlib.h>
char *VersionString = "$VER: LoadKickC0 V1.1";
extern struct ExecBase *SysBase;
#define EXTMEMSTART 0xC00000L
#define EXTMEMMINSIZE (EXTMEMSTART+0x80000L)
#define KICK20SIZE 0x080000L
#define KICKVERSID 0x2500AFL
#define DELAY 3L
extern void __stdargs StartKick(ULONG *,ULONG *);
extern void __stdargs printf(char *,...);
BPTR stdout;
void main(long argc,char **argv)
{
BPTR Handle;
ULONG KickFileHeader[2];
ULONG *KickImage;
stdout=Output();
if (argc==0L) exit (20L);
printf ("LoadKickC0 V1.1 -- (c) 1992 by Matthias Scheler\n\n");
if (SysBase->LibNode.lib_Version>34)
{
printf ("LoadKickC0 will only run under Kickstart 1.2/1.3\n");
exit (5L);
}
if ((((ULONG)SysBase&0xFFFF0000L)!=EXTMEMSTART)||
((ULONG)SysBase->MaxExtMem<EXTMEMMINSIZE))
{
printf ("You must have a 1 MB or greater memory board at $%lx\n",EXTMEMSTART);
exit (10);
}
if (argc<2L)
{
printf ("Usage: LoadKickC0 KICKFILE\n");
exit (10);
}
if ((Handle=Open(argv[1],MODE_OLDFILE))==NULL)
{
printf ("Can't open %s\n",argv[1]);
exit (10);
}
if (Read(Handle,(char *)KickFileHeader,8L)!=8L)
{
Close (Handle);
printf ("Error while reading %s\n",argv[1]);
exit (10);
}
if ((KickFileHeader[0]!=0L)||(KickFileHeader[1]!=KICK20SIZE))
{
Close (Handle);
printf ("%s contains a bad header\n",argv[1]);
exit (10);
}
if ((KickImage=AllocMem(KICK20SIZE,MEMF_PUBLIC))==NULL)
{
Close (Handle);
printf ("Out of memory\n");
exit (10);
}
if (Read(Handle,(char *)KickImage,KICK20SIZE)!=KICK20SIZE)
{
FreeMem (KickImage,KICK20SIZE);
Close (Handle);
printf ("Error while reading %s\n",argv[1]);
exit (10);
}
Close (Handle);
if (KickImage[3]!=KICKVERSID)
{
FreeMem (KickImage,KICK20SIZE);
printf ("Kickstart must be V%d.%d\n",KICKVERSID);
exit (10);
}
printf ("Rebooting in %ld seconds press <CTRL>-C to abort\n",DELAY);
Delay (DELAY*TICKS_PER_SECOND);
if (SetSignal(0L,SIGBREAKF_CTRL_C)&SIGBREAKF_CTRL_C)
{
FreeMem (KickImage,KICK20SIZE);
printf ("\naborted\n");
exit (0L);
}
StartKick(KickImage,(ULONG *)EXTMEMSTART);
}